<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        // let Person = {
        //     name:'赵哲',
        //     age:25,
        //     adress:'河南省南阳市卧龙区',
        //     money:9999999
        // }

        // // 创建prox拦截代理
        // // let proxy_ = new Proxy(target,handler);
        // // target:要代理的对象 handler 拦截操作
        // let proxy_ = new Proxy(Person, {
        //     // 目标对象  属性名 和 proxy 实例本身
        //     get(target,prokey,self){
        //         console.log(target);
        //         console.log(prokey);
        //         console.log(self);
        //     }
        // })

        // proxy_.adress;
// ==================================================================== 
        // get 拦截
        //     let Person = {
        // 
       // name:'赵哲',
        //         age:25,
        //         adress:'河南省南阳市卧龙区',
        //         money:9999999
        //     }

        //     // 创建prox拦截代理
        //     // let proxy_ = new Proxy(target,handler);
        //     // target:要代理的对象 handler 拦截操作
        //     let proxy_ = new Proxy(Person, {
        //         // 目标对象  属性名 和 proxy 实例本身
        //         get(target,prokey){
        //            if(prokey == 'money'){
        //             throw '个人财产不可看 *******';
        //            }
        //         // 其他正常访问
        //         return  target[prokey];
        //         }
        //     })

        //    console.log( proxy_.adress);
        //    console.log( proxy_.money);

        // set拦截
        //  ==================================================================== 
        // let Person = {
        //     name: '赵哲',
        //     age: 25,
        //     adress: '河南省南阳市卧龙区',
        //     money: 9999999
        // }

        // // 创建prox拦截代理
        // // let proxy_ = new Proxy(target,handler);
        // // target:要代理的对象 handler 拦截操作
        // let proxy_ = new Proxy(Person, {
        //     // 目标对象  属性名 和 proxy 实例本身
        //     set(target, prokey, value) {
        //         if (prokey == 'money') {
        //             console.log('老子的钱不能换');
        //             return
        //         } else if (!(prokey in target)) {
        //             throw `${prokey} is not defind`;
        //         } else {
        //             // 其他正常访问
        //             target[prokey] = value;
        //         }

        //     }
        // })

        // proxy_.money = 3000;
        // proxy_.name = '孙宇东';
        // // proxy_.hhh = 'hahhah';
        // console.log(proxy_);
        // console.log(Person);
        // ========================================================================= 
        // has(target,prokey) 拦截  用 prokey in proxy  判断属性是否在对象中
        // let Person = {
        //     name: '赵哲',
        //     age: 25,
        //     adress: '河南省南阳市卧龙区',
        //     money: 9999999,
        //     vip: true
        // }
        // let proxy = new Proxy(Person,{
        //     has(taget,prokey){
        //         if(prokey == 'vip'){
        //             return false
        //         }
        //         return prokey in taget;
        //     }
        // })
        // console.log('vip' in proxy);
        // console.log('name' in proxy);
        // console.log('add' in proxy);
// =============================================================================================== 
        // deleteProperty(target,prokey) 删除拦截
        let Person = {
            name: '赵哲',
            age: 25,
            adress: '河南省南阳市卧龙区',
            money: 9999999,
            vip: true
        }
        let proxy = new Proxy(Person,{
            deleteProperty(target,prokey){
                if(prokey == 'money'){
                    throw '你无权更改我的钱';
                }
                // 正常删除
                delete target[prokey]
            }
        })
        // delete proxy.money;
        delete proxy.name;
        console.log(proxy);
    </script>
    </script>
</body>

</html>